package cn.laixueit.utils;

import cn.laixueit.vo.ResultPage;
import org.springframework.stereotype.Component;

import java.util.LinkedList;
import java.util.stream.LongStream;

/**
 * @author duxiang
 * @date 2023/12/13 15:54
 */
@Component
public class PageUtils {
    /**
     * 计算页码分页器
     * @param pages 总页数
     * @param current 当前页
     * @param size 每页显示数量
     * @param restrictNum 页码数量
     * @return 分页条
     */
    private ResultPage calculatePageNo(long pages, long current, long size, Integer restrictNum) {
        LinkedList<Long> longs = new LinkedList<>();
        // 算出当前显示是否需要计算
        // 第一页，直接显示1-总页数
        long start = 1;
        long end = restrictNum+1;
        Double ceil = Math.ceil(Double.valueOf(restrictNum)/2);
        int i = ceil.intValue();//中间数
        Long min = Math.min(pages, restrictNum);
        if (current <= i || pages <= restrictNum) { //当前页<=中间数或者总页数<=页码数
            end = min;
        }else if(current == pages){ // 最后一页
            // 当前页 = 总页数
            // 总页数是否大于限定页数
            if(pages>restrictNum){ // 10 > 5 ,10
                start = pages - restrictNum + 1;// 10-5+1 = 6
                end = pages; // 10
            }else{ // 4 < 5 ,5
                start = 1;
                end = pages;
            }
        }else{ // 4 , 10, 5
            start = current - i + 1;
            end = start + restrictNum - 1;
            if(end > pages){
                start = pages - restrictNum +1;
                end = start + restrictNum - 1;
            }
        }
        LongStream.range(start, end+1).forEach(x -> longs.add(x));
        Long[] array = longs.toArray(new Long[min.intValue()]);
        return  new ResultPage(current,size,pages,restrictNum,array);
    }
}
